package jm.nj.demo05mian.demo01;

import java.util.Objects;

/*
* 选中类-->ctrl+t--->查看继承关系
* */
public class Person extends Object{
    private String name;
    private int age;

    /*
    * 重写Object类中 toString方法
    * 打印对象的属性
    * */

    @Override
    public String toString() {
        return "Person[name:"+name+",age:"+age+"]";
    }

    /*
    * 重写Object类中的equals方法,不改变方法体
    * */

    /*@Override
    public  boolean equals(Object obj){
        return (this == obj);
    }*/


   /* * 比较对象地址值没有意义,所以重写Object类中的equals方法
    * 比较对象中年龄和姓名是否相同
    * 相同返回trun,不相同返回false
    *
    * */
    @Override
    public boolean equals(Object obj){

   /*     * 为了增加效率,如果obj是null,直接返回false
        * */
        if(obj==null){
            return false;
        }

       /* * 为了增加效率,如果obj是this本身,直接返回true
        * */
        if(obj == this){
            return true;
        }

        /*
        * 因为参数是Object,可以传递任意的子类
        * 需要增加判断,只要是Person的时候,才向下转型
        * */
        if(obj instanceof Person){

            //Object obj = p2;
           // 无法使用子类特有的成员,必须向下转型

            Person p = (Person)obj;
            boolean b = (this.name.equals(p.name))  && (this.age ==p.age);
            return b;
        }
        //不是Person直接返回false
        return false;
        

    }







    /*
     * 可以使用快捷键生成equals(Object obj)
     * */



   /* @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof Person)) {
            return false;
        }
        Person person = (Person) o;
        return getAge() == person.getAge() &&
                getName().equals(person.getName());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getName(), getAge());
    }*/




    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
